class Solution {
 public:
  bool verifyPostorder(vector<int>& postorder) {
    return recur(postorder, 0, postorder.size() - 1);
  }
  // 不一定全部搜索，所以有返回值
  // 要去递归搜索左右子树，所有需要l,r
  bool recur(vector<int>& postorder, int l, int r) {
    if (l >= r) return true;  // 退出条件
    int i = l;
    int cur_value = postorder[r];
    while (i < r && postorder[i] < cur_value) i++;
    int r_first = i;
    while (i < r && postorder[i] > cur_value) i++;
    // 单层递归所做的事情，判断是否是一个BST的两个条件
    return i == r && recur(postorder, l, r_first - 1) &&
           recur(postorder, r_first, r - 1);
  }
};